import os
import sys
from PyQt5.QtCore import Qt, pyqtSignal, QObject
from PyQt5.QtWidgets import QApplication, QMainWindow, QSplitter, QPushButton, QVBoxLayout, QWidget

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("嵌套 QSplitter 示例")
        self.resize(800, 600)

        # 创建一个顶层水平 QSplitter
        top_splitter = QSplitter(Qt.Horizontal)
        self.setCentralWidget(top_splitter)

        """整个页面中的左侧部分"""
        left_widget = QSplitter(Qt.Vertical)  # 左侧再分为两部分
        top_splitter.addWidget(left_widget)  # top_splitter中的左侧部分

        # 再创建左1，左2两个按钮
        up_button = QPushButton("上边按钮")
        bottom_button = QPushButton("下边按钮")

        # 添加到左侧的widget中
        left_widget.addWidget(up_button)  # left_widget中的上边部分
        left_widget.addWidget(bottom_button)  # left_widget中的下边部分

        """整个页面中的右侧部分"""
        # 创建一个垂直 QSplitter 作为右侧部分
        right_splitter = QSplitter(Qt.Horizontal)
        top_splitter.addWidget(right_splitter)  # top_splitter中的右侧部分

        # 创建中、右两个控件
        mid_widget = QPushButton("左边按钮")
        right_widget = QPushButton("右边按钮")

        # 将中、右控件添加到垂直 QSplitter
        right_splitter.addWidget(mid_widget)  # right_widget中的上边部分
        right_splitter.addWidget(right_widget)  # left_widget中的下面部分

        # 设置各部分的初始大小比例
        top_splitter.setStretchFactor(0, 1)  # 左侧占 1 份
        top_splitter.setStretchFactor(1, 2)  # 右侧整体占 2 份

        left_widget.setStretchFactor(0, 1)
        left_widget.setStretchFactor(1, 1)
        right_splitter.setStretchFactor(0, 3)  # 中间占 1 份
        right_splitter.setStretchFactor(1, 1)  # 右侧占 1 份

        # 显式设置初始大小
        # top_splitter.setSizes([400, 400])  # 左右各占 400 像素


if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = MainWindow()
    win.show()
    sys.exit(app.exec_())